<?php
try {

    function findFiles($directory) {
        $files = [];
        // 打开目录句柄
        $handle = opendir($directory);
        if ($handle) {
            while (($file = readdir($handle))!== false) {
                if ($file!= '.' && $file!= '..') {
                    $filePath = $directory. '/'. $file;
                    if (is_file($filePath)) {
                        $files[] = $filePath;
                    } elseif (is_dir($filePath)) {
                        $files = array_merge($files, findFiles($filePath));
                    }
                }
            }
            closedir($handle);
        }
        return $files;
    }

    function copyJpg($outputDir, $targetDir) {
        if (!is_dir($targetDir)) {
            mkdir($targetDir, 0755, true);
        }
        // echo "cp -fr $outputDir/*.jpg $targetDir";
        exec("cp -fr $outputDir/*.jpg $targetDir");
    }

    function extractFlatImg($zipFile, $outputDir) {
        if (!is_dir($outputDir)) {
            mkdir($outputDir, 0755, true);
        }

        //解压图片，将所有内容遍历平铺到一个文件夹
        $_tempDirName = 'temp'.time();
        exec("unzip $zipFile -d ./tmp/".$_tempDirName);

        //遍历文件夹层级 
        $directory = "./tmp/".$_tempDirName; // 替换为你要搜索的文件夹路径
        $files = findFiles($directory);
        foreach ($files as $file) {
            exec('mv "'.$file.'" '.$directory);//移动到最外层
        }
        //移动到目标路径 按需增加图片文件格式
        exec('mv '.$directory.'/*.jpg '.$outputDir);
        exec('mv '.$directory.'/*.png '.$outputDir);
        exec('mv '.$directory.'/*.JPG '.$outputDir);
        exec('mv '.$directory.'/*.PNG '.$outputDir);
        unlink($directory);
    }

    function extractFlatVideo($zipFile, $outputDir) {
        if (!is_dir($outputDir)) {
            mkdir($outputDir, 0755, true);
        }

        //解压图片，将所有内容遍历平铺到一个文件夹
        $_tempDirName = 'temp'.time();
        exec("unzip $zipFile -d ./tmp/".$_tempDirName);

        //遍历文件夹层级 
        $directory = "./tmp/".$_tempDirName; // 替换为你要搜索的文件夹路径
        $files = findFiles($directory);
        foreach ($files as $file) {
            exec('mv "'.$file.'" '.$directory);//移动到最外层
        }
        //移动到目标路径 按需增加视频文件格式
        exec('mv '.$directory.'/*.mp4 '.$outputDir);
        exec('mv '.$directory.'/*.MP4 '.$outputDir);
        unlink($directory);
    }

    function cleanOutput($outputDir) {
        if (empty($outputDir)) {return false;}
        exec("rm -rf ".$outputDir."/*");
        exec("rm -rf ./".$outputDir."/*");
    }

    $post = $_POST;
    $zipFile = $filePath = $post['targetFile'];
    $type = $post['type'];
    if (empty($filePath) || empty($type)) {
        echo json_encode([
            'code' => 0, 'msg' => '参数错误', 'filePath' => $fileName, 'type' => $type,
        ]);exit;
    }
    switch ($type) {
        case 'img'://图片会按天分割文件夹
            $targetDir = './images/product'.date('ymd', time());
            $targetPath = "./images/".$targetDir."/";
            $outputDir = './output';
            extractFlatImg($zipFile, $outputDir);//解压
            copyJpg($outputDir, $targetDir);//移动
            cleanOutput($outputDir);//清理
            exec("rm -f $zipFile");
            echo json_encode([
                'code' => 1, 'msg' => '图片处理完成', 'targetDir' => $targetDir,
            ]);exit;
            break;
        case 'video'://视频平铺
            $targetPath = "./media/";
            $outputDir = './output';
            extractFlatVideo($zipFile, $outputDir);//解压
            exec("cp -fr $outputDir/* $targetPath");//移动
            cleanOutput($outputDir);//清理
            $res = exec("ls ".$targetPath);
            exec("rm -f $zipFile");
            echo json_encode([
                'code' => 1, 'msg' => '视频处理完成', 'targetDir' => $res,
            ]);exit;
            break;
        case 'email'://图片平铺
            $targetPath = "./emailimg/";
            $outputDir = './output';
            extractFlatImg($zipFile, $outputDir);//解压
            exec("cp -fr $outputDir/* $targetPath");//移动
            cleanOutput($outputDir);//清理
            $res = exec("ls ".$targetPath);
            exec("rm -f $zipFile");
            echo json_encode([
                'code' => 1, 'msg' => '邮箱图片处理完成', 'targetDir' => $res,
            ]);exit;
            break;
    }
} catch (\Throwable $th) {
    echo $th->getMessage();
    var_dump($th->getTraceAsString());
}
exit;